package tcpdemo1;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class ClientThread extends Thread{
    @Override
    public void run() {
        try {
            // 创建客户端的Socket
            // 第一个参数是服务器的地址：ip地址、服务器的局域网名等  127.0.0.1 localhost 表示本机
            // 第二个参数是服务器的端口号，需要和服务器保持一致
            Socket socket = new Socket("10.1.254.50", 9901);
            // 死循环，服务器一直处于运转状态

            // 使用socket和服务端进行通信
            /////////////////发送消息////////////////////////////////
            // 获取socket的输出流对象
            BufferedWriter bufferedWriter = new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
            // 发送的消息
            String strMsg = "nihao,中国~~~~~~~";

            // 客户端发送的消息从控制台读入
            Scanner scanner = new Scanner(System.in); // System.in 表示的控制的输入流
            System.out.println("请输入客户端发送的消息：");
            strMsg = scanner.nextLine();

            System.out.println("客户端：" + strMsg);
            bufferedWriter.write(strMsg);
            // 附加一个回车符
            bufferedWriter.newLine(); // 相当于发送了一个换行符
            // 自定义一个通信协议：消息发送末尾 使用 eof 作为结束标志位

            bufferedWriter.write("eof");
            bufferedWriter.write("\n");
            // 清空输出流的发送区域，将信息发送到网络上
            bufferedWriter.flush();
            //////////////接收消息//////////////////////////////////
            // 获取socket的输入流对象
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(socket.getInputStream(), "UTF-8"));
            // 读取信息
            while (true) {
                String str = bufferedReader.readLine();
                // 如果读取到了规定结束符 则结束读取
                if (str != null && !str.equals("eof")) {
                    // 业务逻辑处理的地方
                    System.out.println("客户端：" + str);
                } else {
                    // 终止循环读取信息
                    break;
                }
            }

        } catch (IOException  e) {
            e.printStackTrace();
        }
    }
}
